counting algorithm